// 1036. 逃离大迷宫/未解决
// https://leetcode.cn/problems/escape-a-large-maze/
// 迷宫最短路径 解法二
// 在一个 106 x 106 的网格中，每个网格上方格的坐标为 (x, y)
// 现在从源方格 source = [sx, sy] 开始出发，意图赶往目标方格 target = [tx, ty]
// 数组 blocked 是封锁的方格列表，其中每个 blocked[i] = [xi, yi] 表示坐标为 (xi,
// yi) 的方格是禁止通行
// 每次移动，都可以走到网格中在四个方向上相邻的方格，只要该方格不在给出的封锁列表
// blocked 上。不允许走出网格。 只有在可以通过一系列的移动从源方格 source
// 到达目标方格 target 时才返回 true。否则，返回 false。 输入：source = [0,0],
// target = [0,2] blocked = [ [0,1], [1,0]], 输出：false
// 从源方格无法到达目标方格，因为我们无法在网格中移动。
// 无法向北或者向东移动是因为方格禁止通行,无法向南或者向西移动是因为不能走出网格。
#include <stdio.h>
typedef struct {
  int x;
  int y;
} point;
int num[10][10];
point stack[100];
int count = 0;
int m, n;
void trace(int x, int y) {
  point p = {x, y};
  stack[count++] = p;
  num[x][y] = 1;
  if (x == m - 1 && y == n - 1) {
    for (int i = 0; i < count; i++) printf("(%d,%d)\n", stack[i].x, stack[i].y);
    return;
  }
  if (x + 1 < m && num[x + 1][y] == 0) trace(x + 1, y);
  if (x - 1 >= 0 && num[x - 1][y] == 0) trace(x - 1, y);
  if (y + 1 < n && num[x][y + 1] == 0) trace(x, y + 1);
  if (y - 1 >= 0 && num[x][y - 1] == 0) trace(x, y - 1);
  count--;
  num[x][y] = 0;
}
int main(void) {
  while (scanf("%d %d", &m, &n) != EOF) {
    count = 0;
    for (int i = 0; i < m; i++) {
      for (int j = 0; j < n; j++) {
        scanf("%d ", &num[i][j]);
      }
    }
    trace(0, 0);
  }
}